#ifndef MASTER_STACK_HPP
#define MASTER_STACK_HPP

#include "../Base/BaseData.hpp"

using namespace base;

template <typename TStack, typename TElemType>
class MasterStack {
public:
    virtual ~MasterStack() = default;

    virtual Status initStack(TStack &s) = 0;
    virtual Status destoryStack(TStack &s) = 0;
    virtual Status clearStack(TStack &s) = 0;
    virtual bool stackEmpty(const TStack s) = 0;
    virtual int stackLength(const TStack s) = 0;
    virtual TElemType getTop(const TStack s) = 0;
    virtual Status push(TStack &s, TElemType e) = 0;
    virtual Status pop(TStack &s, TElemType &e) = 0;
    virtual Status StackTraverse(TStack s) = 0;
    };

#endif
